/**
 * Copyright 2008 Matthew Purland (m.purland@gmail.com)
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.variance.version.identifier;


/**
 * Interface to identify the stage of revision of a revision capable object.
 *
 * @author Matthew Purland
 */
public interface RevisionIdentifier<A> extends Comparable<RevisionIdentifier> {

// Should be to just get the revision identifier source
// associated with the identifier to determine availability and
// and if it is the latest

//    /**
//     * Determine if this revision identifier is available to be used. This
//     * refers to finding out if a given identifier is already taken and not
//     * available for use. This should delegate to the revision identifier source
//     * for more information.
//     *
//     * @return Returns true if the specified revision identifier is available to
//     *         be used
//     */
//    boolean isAvailable();

//    /**
//     * Determine whether this revision identifier is the latest and most recent.
//     */
//    boolean isLatest();

    /**
     * Get the revision identifier source that this identifier is associated
     * with.
     *
     * @return Returns the revision identifier source for the current identifier.
     */
    RevisionIdentifierSource getRevisionIdentifierSource();
    
    /**
     * Returns the identifier for the given revision identifier.
     */
    A getIdentifier();
}
